###############################################################################
# Globals #####################################################################
###############################################################################

__version__ = '0.0.1'
__date__ = 'Date: 2011/01/12'
__author__ = 'Bart Robinson <bartrobinson76@yahoo.com>'
__doc__ = '''
Two dimensional knots.
'''
__all__ = ['knot2d0', 'knot2d1', 'knot2d2']

###############################################################################
# Imports #####################################################################
###############################################################################

from pycgx.math.vectors.vector2 import vector2
from pycgx.geometry.handle2d import handle2d

###############################################################################
# Classes and Methods #########################################################
###############################################################################

class knot2d(vector2):
	'''
	knot2d base class
	'''
	
	def __init__(self, vector = None, handles = None):
		vector2.__init__(self, vector)
		self.handles = handles
	
	def __str__(self):
		vString = vector2.__str__(self)
		hString = ""
		for handle in self.handles:
			hString += handle.__str__()
		return vString + hString
	
	def x(self, value = None):
		if value != None:
			self.data[0] = value
		else:
			return self.data[0]
	
	def y(self, value = None):
		if value != None:
			self.data[1] = value
		else:
			return self.data[1]
	
	def handles(self, handles = None):
		if handles != None:
			self.handles = handles
		else:
			return self.handles

class knot2d0(knot2d):
	'''
	knot2d0()
	knot2d0(vector2)
	For knots with no handles resulting in linear curves.
	'''
	
	def __init__(self, vector = vector2()):
		knot2d.__init__(self, vector, [])

class knot2d1(knot2d):
	'''
	knot2d1()
	For knots with one handle resulting in a smooth curve using weights.
	'''
	
	def __init__(self, vector = vector2(), handle = handle2d()):
		knot2d.__init__(self, vector, [handle])

class knot2d2(knot2d):
	'''
	knot2d2()
	For knots with two handles resulting in a smooth curve using incoming and outgoing controls.
	'''
	
	def __init__(self, vector = vector2(), handleA = handle2d(), handleB = handle2d()):
		knot2d.__init__(self, vector, [handleA, handleB])